USE [Registry_AHOBPRHRE]
GO

/****** Object:  StoredProcedure [AHOBPR].[SP_ReportMilitaryStatus]    Script Date: 1/30/2018 7:18:47 AM ******/
DROP PROCEDURE [AHOBPR].[SP_ReportMilitaryStatus]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- =============================================
-- Author:		Padmashri Valaparla
-- Create date: 1/26/2017
-- Description:	Used for Military Status Report
-- =============================================

CREATE PROCEDURE [AHOBPR].[SP_ReportMilitaryStatus]
	@dutyStatusAtFirstLogin char(1) = 'N' --Y or N.  If no, use current
AS
BEGIN
	DECLARE @Query VARCHAR(8000);
	DECLARE @dutyAtFirstLoginVariable VARCHAR(50) = 'b.STD_SERVICE_STATUS_ID';

IF @dutyStatusAtFirstLogin <> '' and @dutyStatusAtFirstLogin = 'N'
	SET @dutyAtFirstLoginVariable = 'b.STD_SERVICE_STATUS_ID';
ELSE
	SET @dutyAtFirstLoginVariable = 'b.STD_SERVICE_STATUS_ID_WHEN_ENROLLED';

	SET @Query = ' SELECT case(s.STD_SERVICE_STATUS_ID) WHEN 3 THEN s.SERVICE_STATUS WHEN 5 THEN s.SERVICE_STATUS  WHEN 2 THEN s.SERVICE_STATUS
		  WHEN 1 THEN s.SERVICE_STATUS WHEN 4 THEN s.SERVICE_STATUS ELSE ''Deceased'' END AS ''Duty Status''
		  ,IsNull(A.CountOfStatus,0) AS Participant, IsNull(B.CountOfStatus,0) AS ''Eligible/Reviewed-Eligible''
		  ,IsNull(C.CountOfStatus,0) AS ''Not Eligible/Reviewed-Not Eligible'',IsNull(D.CountOfStatus,0) AS ''Review''
		  ,IsNull(E.CountOfStatus,0) AS ''No Consent'', IsNull(F.Total,0) as Total
	  FROM [AHOBPR].[STD_SERVICE_STATUS] s 
	  LEFT JOIN (
					SELECT a.REGISTRANT_STATUS,c.SERVICE_STATUS,COUNT(a.REGISTRANT_STATUS) AS CountOfStatus 
					FROM [AHOBPR].[STD_REGISTRANT_STATUS] a 
						LEFT JOIN [AHOBPR].[REGISTRANT] b ON a.STD_REGISTRANT_STATUS_ID = b.STD_REGISTRANT_STATUS_ID 
						LEFT JOIN [AHOBPR].[STD_SERVICE_STATUS] c ON c.STD_SERVICE_STATUS_ID = ' + @dutyAtFirstLoginVariable + '
					GROUP BY c.SERVICE_STATUS,a.REGISTRANT_STATUS
					HAVING a.REGISTRANT_STATUS = ''Participant'' 
				) A 
				on A.Service_Status = s.SERVICE_STATUS
		LEFT JOIN (
					SELECT ReviewedEligible.SERVICE_STATUS, SUM(CountOfStatus) AS CountOfStatus from
					(
						SELECT a.REGISTRANT_STATUS,c.SERVICE_STATUS,COUNT(a.REGISTRANT_STATUS) AS CountOfStatus 
						FROM [AHOBPR].[STD_REGISTRANT_STATUS] a 
							LEFT JOIN [AHOBPR].[REGISTRANT] b ON a.STD_REGISTRANT_STATUS_ID = b.STD_REGISTRANT_STATUS_ID 
							LEFT JOIN [AHOBPR].[STD_SERVICE_STATUS] c ON c.STD_SERVICE_STATUS_ID = ' + @dutyAtFirstLoginVariable + '
						GROUP BY c.STD_SERVICE_STATUS_ID,c.SERVICE_STATUS,a.REGISTRANT_STATUS
						HAVING a.REGISTRANT_STATUS in (''Reviewed - Eligible'', ''Eligible'')
					) ReviewedEligible
					GROUP BY ReviewedEligible.SERVICE_STATUS
				) B 
				ON B.Service_Status = s.SERVICE_STATUS
		LEFT JOIN (
					SELECT ReviewedNotEligible.SERVICE_STATUS, SUM(CountOfStatus) AS CountOfStatus from
					(
						SELECT a.REGISTRANT_STATUS,c.SERVICE_STATUS,COUNT(a.REGISTRANT_STATUS) AS CountOfStatus 
						FROM [AHOBPR].[STD_REGISTRANT_STATUS] a 
							LEFT JOIN [AHOBPR].[REGISTRANT] b ON a.STD_REGISTRANT_STATUS_ID = b.STD_REGISTRANT_STATUS_ID 
							LEFT JOIN [AHOBPR].[STD_SERVICE_STATUS] c ON c.STD_SERVICE_STATUS_ID = ' + @dutyAtFirstLoginVariable + '
						GROUP BY c.SERVICE_STATUS,a.REGISTRANT_STATUS
						HAVING a.REGISTRANT_STATUS in (''Reviewed - Not Eligible'', ''Not Eligible'')
					) ReviewedNotEligible
					GROUP BY ReviewedNotEligible.SERVICE_STATUS
				) C 
				ON C.Service_Status = s.SERVICE_STATUS
		LEFT JOIN (
					SELECT a.REGISTRANT_STATUS,c.SERVICE_STATUS,COUNT(a.REGISTRANT_STATUS) AS CountOfStatus 
					FROM [AHOBPR].[STD_REGISTRANT_STATUS] a 
						LEFT JOIN [AHOBPR].[REGISTRANT] b ON a.STD_REGISTRANT_STATUS_ID = b.STD_REGISTRANT_STATUS_ID 
						LEFT JOIN [AHOBPR].[STD_SERVICE_STATUS] c ON c.STD_SERVICE_STATUS_ID = ' + @dutyAtFirstLoginVariable + '
					GROUP BY c.SERVICE_STATUS,a.REGISTRANT_STATUS
					HAVING a.REGISTRANT_STATUS = ''Review''
				) D 
				ON D.Service_Status = s.SERVICE_STATUS
		LEFT JOIN (
					SELECT a.REGISTRANT_STATUS,c.SERVICE_STATUS,COUNT(a.REGISTRANT_STATUS) as CountOfStatus 
					FROM [AHOBPR].[STD_REGISTRANT_STATUS] a 
						LEFT JOIN [AHOBPR].[REGISTRANT] b ON a.STD_REGISTRANT_STATUS_ID = b.STD_REGISTRANT_STATUS_ID 
						LEFT JOIN [AHOBPR].[STD_SERVICE_STATUS] c ON c.STD_SERVICE_STATUS_ID = ' + @dutyAtFirstLoginVariable + '
					GROUP BY c.SERVICE_STATUS,a.REGISTRANT_STATUS
					HAVING a.REGISTRANT_STATUS = ''No Consent''
				) E 
				ON E.Service_Status = s.SERVICE_STATUS
		LEFT JOIN 
				(	SELECT c.SERVICE_STATUS,COUNT(C.SERVICE_STATUS) as Total
					FROM [AHOBPR].[STD_REGISTRANT_STATUS] a 
						LEFT JOIN [AHOBPR].[REGISTRANT] b on a.STD_REGISTRANT_STATUS_ID = b.STD_REGISTRANT_STATUS_ID 
						LEFT JOIN [AHOBPR].[STD_SERVICE_STATUS] c on c.STD_SERVICE_STATUS_ID = ' + @dutyAtFirstLoginVariable + '
					group by c.SERVICE_STATUS
				)F
			ON F.Service_Status = s.SERVICE_STATUS';


PRINT @Query;
   
EXECUTE(@Query);      

END 


GO


